package org.cn.osiris.pet.service.impl;

import org.cn.osiris.basic.service.IBaiduAiAuditService;
import org.cn.osiris.basic.util.AjaxResult;
import org.cn.osiris.pet.domain.Pet;
import org.cn.osiris.pet.domain.PetDetail;
import org.cn.osiris.pet.domain.PetOnlineAuditLog;
import org.cn.osiris.pet.domain.PetType;
import org.cn.osiris.pet.mapper.PetDetailMapper;
import org.cn.osiris.pet.mapper.PetMapper;
import org.cn.osiris.pet.mapper.PetOnlineAuditLogMapper;
import org.cn.osiris.pet.mapper.PetTypeMapper;
import org.cn.osiris.pet.service.IPetService;
import org.cn.osiris.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 业务实现类：
 */
@Service
public class PetServiceImpl extends BaseServiceImpl<Pet> implements IPetService {


    @Autowired
    private PetTypeMapper petTypeMapper;

    @Autowired
    private PetDetailMapper petDetailMapper;

    @Autowired
    private PetMapper petMapper;

    @Autowired
    private IBaiduAiAuditService baiduAiAuditService;

    @Autowired
    private PetOnlineAuditLogMapper petOnlineAuditLogMapper;
//    @Override
//    public List<PetType> queryTree() {
//
//        //查询所有
//        List<PetType> allPetTypes = petTypeMapper.findAll();
//        //防止重复查询
//        HashMap<Long, PetType> allPetTypeMap = new HashMap<>();
//        //存放查询的树
//        List<PetType> petTypeTree = new ArrayList<>();
//
//        //首先遍历出 所有类型 存放到map中
//        for (PetType petType : allPetTypes) {
//            allPetTypeMap.put(petType.getId(),petType);
//        }
//        //遍历
//        for (PetType temp: allPetTypes) {
//            //如果没有查到父级id
//            if (temp.getParentId()==null){
//                petTypeTree.add(temp);
//            }else {
//                //如果查到父级id 将他放在map中
//                PetType parent = allPetTypeMap.get(temp.getParentId());
//                if (parent!= null){
//                    parent.getChildren().add(temp);
//                }
//            }
//        }
//        System.out.println(petTypeTree);
//
//
//
//
//        return petTypeTree;
//
//
//    }

    @Override
    public void add(Pet pet) {
        super.add(pet);
        //获取宠物详情
        PetDetail petDetail = pet.getPetDetail();
        if(petDetail!=null){
            petDetail.setPetId(pet.getId());
            //添加宠物详情
            petDetailMapper.add(petDetail);
        }

    }

    @Override
    public void update(Pet pet) {
        super.update(pet);
        System.out.println("==============================");
        PetDetail petDetail = pet.getPetDetail();
        if(petDetail!=null){
            petDetail.setPetId(pet.getId());
            System.out.println("============================"+pet.getId());
            //之前在分页查询已经将id查询出来了 - 前端row中有
            petDetailMapper.update(petDetail);
        }
    }

    @Override
    public void delete(Long id) {
        super.delete(id);
        petDetailMapper.delPetDetailByPetId(id);
    }

    @Override
    public AjaxResult onsale(List<Long> ids) {
        //上架
        /*
         *1、审核内容和图片
         * 2、改状态
         * 3、添加审核日志
         * 4、添加到数据库里
         *
         * 审核成功or审核失败
         * 审核成功 全部同通过通过
         * 审核失败 一个失败 就全部失败
         *
         */
        if (ids!=null){
            for (Long id :ids ) {
                Pet pet = petMapper.findById(id);
                //拿去到需要审核的文本
                String auditText = pet.getName();
                //使用百度智能审核文本
                Boolean textBoolean = baiduAiAuditService.textAudit(auditText);
                //拿去到审核的图片资源
                String petResources = pet.getResources();
                //使用百度智能审核图片
                Boolean imageBoolean = baiduAiAuditService.imageAudit(petResources);
                System.out.println("==================="+imageBoolean);
                System.out.println("==================="+textBoolean);
                //获取日志
                PetOnlineAuditLog log = new PetOnlineAuditLog();

                //根据审核结果修改状态 通过 不通过
                //添加审核日志
                if (textBoolean && imageBoolean){
                    //修改的id和修改时间
                    petMapper.onsale(id,new Date());
                    //添加审核日志
                    //审核成功
                    log.setState(1);
                    log.setNote("审核成功");
                    //将审核日志保存
                    petOnlineAuditLogMapper.add(log);

                    return AjaxResult.me().setMessage("审核通过");
                }else {
                    //添加审核日志
                    //审核失败
                    log.setState(0);
                    log.setNote("审核失败");
                    //将审核日志保存
                    petOnlineAuditLogMapper.add(log);

                    System.out.println("审核失败");

                    return new AjaxResult().setSuccess(false).setMessage("审核不通过");
                }
            }
        }

        return AjaxResult.me().setSuccess(false).setMessage("审核不通过");
    }

    @Override
    public AjaxResult offsale(List<Long> ids) {

        //下架
        /*方案：
        * 1、先查后改 调用两次sql
        *
        * 2、直接给需要写sql 使用注解
        *
        * */
        petMapper.offsale(ids,new Date());

        return new AjaxResult();

    }
}
